package com.lu.project.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UniversalTextFormatter {

    public static void main(String[] args) {
        String inputText = "中国的医改（医疗改革）主要是为了提高医疗服务的可及性和质量，降低医疗费用，解决看病难、看病贵的问题。自2009年启动的新一轮医改以来，主要措施包括：\n\n" +
                "1. ​**基本医疗保障**：扩大医保覆盖范围，提高报销比例，减轻患者负担。\n" +
                "2. ​**基层医疗建设**：加强乡村和社区医疗服务，提高基层医疗机构的服务能力。\n" +
                "3. ​**药品价格改革**：推行药品集中采购，降低药品价格，减少患者用药负担。\n" +
                "4. ​**医疗服务体系**：推动公立医院改革，鼓励社会资本进入医疗领域，增加医疗服务供给。\n\n" +
                "尽管取得了一定成效，但仍面临一些挑战，如医疗资源分布不均、医生工作压力大、部分地区医疗服务质量参差不齐等。未来的改革需要进一步深化，关注公平性和可持续性。";

        String formattedText = formatText(inputText);
        System.out.println(formattedText);
    }

    /**
     * 通用文本格式化方法
     *
     * @param text 输入的原始文本
     * @return 格式化后的文本
     */
    public static String formatText(String text) {
        // 1. 去除Markdown标记，如 ​**
        String cleanedText = removeMarkdown(text);

        // 2. 格式化编号列表
        cleanedText = formatNumberedLists(cleanedText);

        // 3. 添加适当的段落分隔和缩进（可根据需要调整）
        cleanedText = addParagraphFormatting(cleanedText);

        return cleanedText;
    }

    /**
     * 去除Markdown格式标记
     *
     * @param text 输入文本
     * @return 去除标记后的文本
     */
    private static String removeMarkdown(String text) {
        // 去除 ​**​ 粗体
        String noBold = text.replaceAll("\\*\\*", "");
        // 可以在这里添加更多的Markdown标记去除规则，如 *斜体*，~~删除线~~ 等
        return noBold;
    }

    /**
     * 格式化编号列表，统一编号样式
     *
     * @param text 输入文本
     * @return 格式化后的文本
     */
    private static String formatNumberedLists(String text) {
        // 使用正则表达式匹配编号列表，如 "1. ", "2. ", 等
        Pattern pattern = Pattern.compile("^(\\d+)\\.\\s*(.*)$", Pattern.MULTILINE);
        Matcher matcher = pattern.matcher(text);
        StringBuffer sb = new StringBuffer();

        while (matcher.find()) {
            String number = matcher.group(1);
            String content = matcher.group(2).trim();
            // 统一格式化为 "1. 内容" 或其他样式，如 "- 内容"
            // 这里保持数字编号，可以根据需要调整
            matcher.appendReplacement(sb, Matcher.quoteReplacement(String.format("%d. %s\n", Integer.parseInt(number), content)));
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    /**
     * 添加段落分隔和缩进
     *
     * @param text 输入文本
     * @return 格式化后的文本
     */
    private static String addParagraphFormatting(String text) {
        // 在段落之间添加两个换行符
        String withNewlines = text.replaceAll("(\\n)\\s*(\\n)", "$1$2"); // 保留单个换行
        withNewlines = withNewlines.replaceAll("(?<!\\n)\\n(?!\n)", "\n\n"); // 确保段落之间有两个换行

        // 可选：为每个段落添加缩进
        // 这里选择不缩进，保持原样。如果需要缩进，可以使用如下代码：
        // String indentedText = withNewlines.replaceAll("(?m)^", "    "); // 每行开头添加四个空格

        return withNewlines;
    }
}
